package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import lombok.Data;

/**
 * @desc CycleStageDataDto
 * @使用场景
 */
@Data
public class CycleStageDataDto extends BaseDto implements Serializable {

  /**
   * 周期阶段资料记录ID
   */
  @ApiModelProperty("周期阶段资料记录ID")
  private String cycleStageDataId;

  /**
   * 被评对象目标周期ID
   */
  @ApiModelProperty("被评对象目标周期ID")
  private String evaObjTargetCycleId;

  /**
   * 虚拟组织下部门ID
   */
  @ApiModelProperty("牵头部门ID")
  private String deptId;

  /**
   * 组织内部门身份名称
   */
  @ApiModelProperty("牵头部门身份")
  private String virtualOrgDeptStatus;

  /**
   * 虚拟组织成员就职记录ID
   */
  @ApiModelProperty("责任人就职记录ID")
  private String virtualOrgInductionRecordId;

  /**
   * 组内职务名称
   */
  @ApiModelProperty("责任人职务")
  private String virtualOrganizationPosition;

  /**
   * 目标周期简称
   */
  @ApiModelProperty("目标周期简称")
  private String cyclelAlias;

  /**
   * 周期名称
   */
  @ApiModelProperty("周期名称")
  private String cycleStandardName;

  /**
   * 周期类型实例简称
   */
  @ApiModelProperty("周期类型实例简称")
  private String cycleNumberShortName;

  /**
   * 实际值
   */
  @ApiModelProperty("实际值")
  private Double actualValue;

  /**
   * 实际值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("实际值单位")
  private String actualValueUnit;

  /**
   * 诊断值
   */
  @ApiModelProperty("诊断值")
  private Double targetDiagnosticValue;

  /**
   * 进度值
   */
  @ApiModelProperty("进度值")
  private Double progressValue;

  /**
   * 进度值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度值单位")
  private String progressValueUnit;

  /**
   * 进度较上次增降幅
   */
  @ApiModelProperty("进度较上次增降幅")
  private Double progressFromLastRatio;

  /**
   * 进度较上次增降幅单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度较上次增降幅单位")
  private String progressFromLastRatioUnit;

  /**
   * 达成度
   */
  @ApiModelProperty("达成度")
  private Double reach;

  /**
   * 达成度单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度单位")
  private String reachUnit;

  /**
   * 达成度较上次增降福
   */
  @ApiModelProperty("达成度较上次增降福")
  private Double actualFromLastTimeRatio;

  /**
   * 达成度较上次增降福单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度较上次增降福单位")
  private String actualFromLastTimeRatioUnit;

  /**
   * 实时得分
   */
  @ApiModelProperty("实时得分")
  private Double realTimeScore;

  /**
   * 实时得分单位
   */
  @ApiModelProperty("实时得分单位")
  private String realTimeScoreUnit;

  /**
   * 权重
   */
  @ApiModelProperty("权重")
  private Double weightValue;

  /**
   * 权重分值
   */
  @ApiModelProperty("权重分值")
  private Double weightScore;

  /**
   * 资料文字概要
   */
  @ApiModelProperty("资料文字概要")
  private String textSummaryData;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 内容性质类型编码 STA_WOR_SUM_CON:阶段工作总结内容 SUM_OF_PRO:问题总结 SOLVING_IDEAS:解决思路 RE_FOR_IMP:改进建议
   */
  @ApiModelProperty("内容性质类型编码")
  private String stageContentType;

  /**
   * 阶段资料具体内容
   */
  @ApiModelProperty("阶段资料具体内容")
  private String stageData;

  /**
   * 内容责任人就职记录ID
   */
  @ApiModelProperty("内容责任人就职记录ID")
  private String filledByInductionId;

  /**
   * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
   */
  @ApiModelProperty("关联目标内容类型编码")
  private String targetCycleContentTypeCode;

  /**
   * 关联目标内容ID
   */
  @ApiModelProperty("关联目标内容ID")
  private String targetCycleContentId;

  /**
   * 周期资料归属对象ID
   */
  @ApiModelProperty("周期资料归属对象ID")
  private String cycleDataObjId;

  /**
   * 资料图片概要地址
   */
  @ApiModelProperty("资料图片概要地址")
  private String summaryDataPic;

  /**
   * 周期ID
   */
  @ApiModelProperty("周期ID")
  private String cycleId;

  /**
   * 周期开始时间
   */
  @ApiModelProperty("周期开始时间")
  private Date cycleStartTime;

  /**
   * 周期结束时间
   */
  @ApiModelProperty("周期结束时间")
  private Date cycleEndTime;

  /**
   * 周期类型标识
   */
  @ApiModelProperty("周期类型标识")
  private String cycleTypeCode;

  /**
   * 周期类型名称
   */
  @ApiModelProperty("周期类型名称")
  private String cycleTypeName;

  /**
   * 周期类型实例标识
   */
  @ApiModelProperty("周期类型实例标识")
  private String cycleTypeInstanceCode;

  /**
   * 是否完成评价工作 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否完成评价工作")
  private String isDoneEvaluate;

  /**
   * 是否完成填报工作 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否完成填报工作")
  private String isDoneFilleout;

  /**
   * 创建人就职记录ID
   */
  @ApiModelProperty("创建人就职记录ID")
  private String createInductionId;

  /**
   * 创建时间
   */
  @ApiModelProperty("创建时间")
  private Date createTime;

  /**
   * 填报角色ID
   */
  @ApiModelProperty("填报角色ID")
  private String evaluationFillRoleId;

  /**
   * 普通角色标识
   */
  @ApiModelProperty("普通角色标识")
  private String roleCode;

  /**
   * 普通角色名称
   */
  @ApiModelProperty("普通角色名称")
  private String roleName;

  /**
   * 是否计划验收周期 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否计划验收周期")
  private String isPlanReceptionCycle;

  /**
   * 任务ID
   */
  @ApiModelProperty("任务ID")
  private String taskId;

  /**
   * 是否过程周期阶段 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否过程周期阶段")
  private String isProcessCycleStage;

  /**
   * 任务实际开始时间
   */
  @ApiModelProperty("任务实际开始时间")
  private Date actualStartTime;

  /**
   * 进度较上次变化值
   */
  @ApiModelProperty("进度较上次变化值")
  private Double fromLastProgressValue;

  /**
   * 进度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("进度较上次变化值单位")
  private String fromLastProgressValueUnit;

  /**
   * 较上次目标变化值
   */
  @ApiModelProperty("较上次目标变化值")
  private Double changeFromLastTarget;

  /**
   * 较上次目标变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标变化值单位")
  private String changeFromLastTargetUnit;

  /**
   * 较上次目标增降幅
   */
  @ApiModelProperty("较上次目标增降幅")
  private Double fromLastTargetLiftRatio;

  /**
   * 较上次目标增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标增降幅单位")
  private String fromLastTargetLiftRatioUnit;

  /**
   * 达成度较上次变化值
   */
  @ApiModelProperty("达成度较上次变化值")
  private Double fromLastReach;

  /**
   * 达成度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("达成度较上次变化值单位")
  private String fromLastReachUnit;

  /**
   * 汇报得分（数值）
   */
  @ApiModelProperty("汇报得分（数值）")
  private Double reportScoreValue;

  /**
   * 汇报得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("汇报得分单位")
  private String reportScoreUnit;

  /**
   * 实际得分（数值）
   */
  @ApiModelProperty("实际得分（数值）")
  private Double actualScoreValue;

  /**
   * 实际得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("实际得分单位")
  private String actualScoreUnit;

  /**
   * 工作周期更新切片
   */
  @ApiModelProperty("工作周期更新切片")
  private String workCycleUpdateSlice;

  /**
   * 汇报得分（文本）
   */
  @ApiModelProperty("汇报得分（文本）")
  private String reportScore;

  /**
   * 实际得分（文本）
   */
  @ApiModelProperty("实际得分（文本）")
  private String actualScore;

  /**
   * 归属内容ID
   */
  @ApiModelProperty("归属内容ID")
  private String belongToContentId;

  /**
   * 超文本内容
   */
  @ApiModelProperty("阶段工作总结内容")
  private String hypertextContent;

  /**
   * 任务实际结束时间
   */
  @ApiModelProperty("任务实际结束时间")
  private Date actualEndTime;

  /**
   * 展示目标值
   */
  @ApiModelProperty("展示目标值")
  private Double showTargetValue;

  /**
   * 冗余单位
   */
  @ApiModelProperty("展示目标值单位")
  private String unit;

  /**
   * 归属内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 INDUCTION_ID:就职记录 WORK_TASK:工作任务
   */
  @ApiModelProperty("归属内容类型编码")
  private String belongToContentTypeCode;

  /**
   * 父子中周期类型 PARENT_CYCLE:父周期 MID_CYCLE:中期 SUB_CYCLE:子周期 PROCESS_CYCLE:过程周期
   */
  @ApiModelProperty("父子中周期类型")
  private String parentSubMidCycleType;

  /**
   * 任务名称
   */
  @ApiModelProperty("任务名称")
  private String taskName;

  /**
   * 数据结果ID
   */
  @ApiModelProperty("数据结果ID ")
  private String dataResultId;

  /**
   * 数据值结果
   */
  @ApiModelProperty("数据值结果")
  private Double dataResult;

  /**
   * 操作人就职记录ID
   */
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 执行周期阶段周期结束时间
   */
  @ApiModelProperty("执行周期阶段周期结束时间")
  private Date newCycleEndTime;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    CycleStageDataDto that = (CycleStageDataDto) o;
    return (
      cycleStageDataId == that.cycleStageDataId &&
      evaObjTargetCycleId == that.evaObjTargetCycleId &&
      deptId == that.deptId &&
      virtualOrgDeptStatus == that.virtualOrgDeptStatus &&
      virtualOrgInductionRecordId == that.virtualOrgInductionRecordId &&
      virtualOrganizationPosition == that.virtualOrganizationPosition &&
      cyclelAlias == that.cyclelAlias &&
      cycleStandardName == that.cycleStandardName &&
      cycleNumberShortName == that.cycleNumberShortName &&
      actualValue == that.actualValue &&
      actualValueUnit == that.actualValueUnit &&
      targetDiagnosticValue == that.targetDiagnosticValue &&
      progressValue == that.progressValue &&
      progressValueUnit == that.progressValueUnit &&
      progressFromLastRatio == that.progressFromLastRatio &&
      progressFromLastRatioUnit == that.progressFromLastRatioUnit &&
      reach == that.reach &&
      reachUnit == that.reachUnit &&
      actualFromLastTimeRatio == that.actualFromLastTimeRatio &&
      actualFromLastTimeRatioUnit == that.actualFromLastTimeRatioUnit &&
      realTimeScore == that.realTimeScore &&
      realTimeScoreUnit == that.realTimeScoreUnit &&
      weightValue == that.weightValue &&
      weightScore == that.weightScore &&
      textSummaryData == that.textSummaryData &&
      operateTime == that.operateTime &&
      stageContentType == that.stageContentType &&
      stageData == that.stageData &&
      filledByInductionId == that.filledByInductionId &&
      targetCycleContentTypeCode == that.targetCycleContentTypeCode &&
      targetCycleContentId == that.targetCycleContentId &&
      cycleDataObjId == that.cycleDataObjId &&
      summaryDataPic == that.summaryDataPic &&
      cycleId == that.cycleId &&
      cycleStartTime == that.cycleStartTime &&
      cycleEndTime == that.cycleEndTime &&
      cycleTypeCode == that.cycleTypeCode &&
      cycleTypeName == that.cycleTypeName &&
      cycleTypeInstanceCode == that.cycleTypeInstanceCode &&
      isDoneEvaluate == that.isDoneEvaluate &&
      isDoneFilleout == that.isDoneFilleout &&
      createInductionId == that.createInductionId &&
      createTime == that.createTime &&
      evaluationFillRoleId == that.evaluationFillRoleId &&
      roleCode == that.roleCode &&
      roleName == that.roleName &&
      isPlanReceptionCycle == that.isPlanReceptionCycle &&
      taskId == that.taskId &&
      isProcessCycleStage == that.isProcessCycleStage &&
      actualStartTime == that.actualStartTime &&
      fromLastProgressValue == that.fromLastProgressValue &&
      fromLastProgressValueUnit == that.fromLastProgressValueUnit &&
      changeFromLastTarget == that.changeFromLastTarget &&
      changeFromLastTargetUnit == that.changeFromLastTargetUnit &&
      fromLastTargetLiftRatio == that.fromLastTargetLiftRatio &&
      fromLastTargetLiftRatioUnit == that.fromLastTargetLiftRatioUnit &&
      fromLastReach == that.fromLastReach &&
      fromLastReachUnit == that.fromLastReachUnit &&
      reportScoreValue == that.reportScoreValue &&
      reportScoreUnit == that.reportScoreUnit &&
      actualScoreValue == that.actualScoreValue &&
      actualScoreUnit == that.actualScoreUnit &&
      workCycleUpdateSlice == that.workCycleUpdateSlice &&
      reportScore == that.reportScore &&
      actualScore == that.actualScore &&
      belongToContentId == that.belongToContentId &&
      hypertextContent == that.hypertextContent &&
      actualEndTime == that.actualEndTime &&
      showTargetValue == that.showTargetValue &&
      unit == that.unit &&
      belongToContentTypeCode == that.belongToContentTypeCode &&
      parentSubMidCycleType == that.parentSubMidCycleType &&
      taskName == that.taskName &&
      dataResultId == that.dataResultId &&
      dataResult == that.dataResult &&
      operationInductionId == that.operationInductionId &&
      newCycleEndTime == that.newCycleEndTime
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      cycleStageDataId,
      evaObjTargetCycleId,
      deptId,
      virtualOrgDeptStatus,
      virtualOrgInductionRecordId,
      virtualOrganizationPosition,
      cyclelAlias,
      cycleStandardName,
      cycleNumberShortName,
      actualValue,
      actualValueUnit,
      targetDiagnosticValue,
      progressValue,
      progressValueUnit,
      progressFromLastRatio,
      progressFromLastRatioUnit,
      reach,
      reachUnit,
      actualFromLastTimeRatio,
      actualFromLastTimeRatioUnit,
      realTimeScore,
      realTimeScoreUnit,
      weightValue,
      weightScore,
      textSummaryData,
      operateTime,
      stageContentType,
      stageData,
      filledByInductionId,
      targetCycleContentTypeCode,
      targetCycleContentId,
      cycleDataObjId,
      summaryDataPic,
      cycleId,
      cycleStartTime,
      cycleEndTime,
      cycleTypeCode,
      cycleTypeName,
      cycleTypeInstanceCode,
      isDoneEvaluate,
      isDoneFilleout,
      createInductionId,
      createTime,
      evaluationFillRoleId,
      roleCode,
      roleName,
      isPlanReceptionCycle,
      taskId,
      isProcessCycleStage,
      actualStartTime,
      fromLastProgressValue,
      fromLastProgressValueUnit,
      changeFromLastTarget,
      changeFromLastTargetUnit,
      fromLastTargetLiftRatio,
      fromLastTargetLiftRatioUnit,
      fromLastReach,
      fromLastReachUnit,
      reportScoreValue,
      reportScoreUnit,
      actualScoreValue,
      actualScoreUnit,
      workCycleUpdateSlice,
      reportScore,
      actualScore,
      belongToContentId,
      hypertextContent,
      actualEndTime,
      showTargetValue,
      unit,
      belongToContentTypeCode,
      parentSubMidCycleType,
      taskName,
      dataResultId,
      dataResult,
      operationInductionId,
      newCycleEndTime
    );
  }

}
